Stellen Sie gregorianischen Kalender für Stunde des Tages in Java
-
01-10-2019 - |
Frage
Ich bin mit einem gregorianischen Kalender ein bestimmtes Datum und Zeit auf eine Anwendung, um die Set-Funktion des Gregorianischen Kalenders verwendet wird. Wenn ich die getTime () Methode verwenden, gibt es mir die jedoch richtig ausgegeben, wenn ich Zugriff versuchen, die Hour_Of_Day und Minute eine falsche Nummer gibt.
Calendar time = new GregorianCalendar();
time.set(2010, Calendar.JANUARY, 1, 7, 20,0);
hour = time.HOUR_OF_DAY;
minute = time.MINUTE;
Die Stunde gibt eine Leistung von 11 und die Minute gibt einen einen Wert von 12
Alle Vorschläge, wie dieses Problem beheben?
Dank
Lösung
Der Code ist die Zuordnung nur Stunde / Minute zu Konstanten. Sie müssen Calendar.get (int) nennen:
hour = time.get(Calendar.HOUR_OF_DAY);
minute = time.get(Calendar.MINUTE);
Andere Tipps
tl; dr
myGregCal
.toZonedDateTime() // Convert from legacy class GregorianCalendar to modern ZonedDateTime.
.getHour() // Get hour-of-day, 0-23.
java.time
Viele einfacher mit den modernen java.time Klassen, die diese lästigen alten Legacy-Datum-Zeit-Klassen ersetzen.
Die ZonedDateTime
Klasse stellt ein Moment auf der Timeline in einer bestimmten Zeitzone mit einer Auflösung von Nanosekunden.
Konvertieren von Ihrem GregorianCalendar
mit neuen Methoden hinzugefügt, um die alten Klassen.
ZonedDateTime zdt = myGregCal.toZonedDateTime() ;
Oder starten Sie frisch ohne GregorianCalendar
Klasse.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.of( 2010 , Month.JANUARY , 1 , 7 , 20 , 0 , 0 , z );
Wenn Sie nur mit dem Time-of-day-Teils arbeiten wollen, extrahieren Sie eine LocalTime
.
LocalTime localTime = zdt.toLocalTime() ;
Wenn Sie wirklich die ganzen Zahlen von Stunden und Minuten möchten, können Sie für diejenigen befragen.
int hour = zdt.getHour();
int minute = zdt.getMinute();
Über java.time
Die java.time Rahmen in Java 8 und später gebaut. Diese Klassen verdrängen die lästige alte Vermächtnis Datum Zeitklassen wie java.util.Date
, Calendar
& SimpleDateFormat
.
Die Joda-Time Projekt nun in Wartungsmodus , rät Migration auf die java.time Klassen.
Um mehr zu erfahren, finden Sie in der Oracle Tutorial . Und Stack-Überlauf suchen viele Beispiele und Erklärungen. Spezifikation JSR 310 .
Wo die java.time Klassen erhalten?
- Java SE 8 und SE 9 und später
- Built-in.
- Ein Teil des Standard-Java-API mit einer gebündelten Implementierung.
- Java 9 fügt einige kleinere Features und Korrekturen.
- Java SE 6 und SE 7
- Ein großer Teil der java.time Funktionalität zurückportiert zu Java 6 & 7 in ThreeTen-Backport .
- Android
- Die ThreeTenABP Projekt passt sich < em> ThreeTen-Backport (siehe oben) für Android speziell.
- Siehe So verwenden ThreeTenABP ... .
Die ThreeTen-Extra Projekt erstreckt java.time mit zusätzlichen Klassen. Dieses Projekt ist ein proving Boden für eine mögliche zukünftige Erweiterungen java.time. Sie können einige nützliche Klassen hier wie Interval
YearWeek
, YearQuarter
und mehr .